Many communications systems employ a hybrid automatic repeat request (HARQ) error correction mechanism to improve the reliability of data transmissions. In a HARQ system, an encoded block of information bits that formed part of a failed transmission (as indicated by a negative result of a cyclic redundancy check (CRC), for example) is stored in a memory of a receiver, for example, as a series of soft decisions representing the information bits originally transmitted. The receiver requests re-transmission of the information block, and when the information block is re-transmitted, the encoded bits representing the raw information may adopt positions within the re-transmitted block different than those adopted when the information block was originally transmitted (i.e., the re-transmitted block may be punctured differently to the originally transmitted block). The re-transmitted encoded block received by the receiver is combined with the stored encoded block of the failed transmission in an attempt to reconstruct the transmitted information block correctly.
Combining the stored encoded block and the received re-transmitted block is achieved by a simple addition of the soft decisions contained in the two blocks. The result of such an addition can, however, occupy more bits than are occupied by each of the two soft decisions to be added, and may thus be too large to be represented accurately in the available number of bits of memory. Attempting to store a value that is too large for the available memory (known as “memory overflow”) can result in “wrapping” of the value, in which the most significant bit of the result of the addition is lost, leading to distortion of the value. Alternatively, “clipping” of the value may occur, causing the value to be limited to the maximum value that can be represented by the number of available bits of memory. For example, consider the situation where the numbers 15 and 2 are to be added, and the result is to be stored in a four bit memory. The number 15 is represented by the binary sequence 1, 1, 1, 1, while the number 2 is represented by the sequence 0, 0, 1, 0. Adding 2 to 15 gives 17, which is represented by the sequence 1, 0, 0, 0, 1. That sequence cannot be stored accurately in a four-bit memory because it requires five bits. In a system where wrapping occurs in the event of memory overflow, the sequence 0, 0, 0, 1, representing the decimal value 1, is stored, while a system that employs clipping will store the sequence 1, 1, 1, 1, representing the decimal value 15. In both cases, the value stored is different from the actual value calculated. That problem increases with each additional transmission that is required to decode the transmitted block successfully, as the size (or dynamic range) of the result of the addition of all of the failed and re-transmitted information blocks increases with each re-transmission.
In one known method, block combination is performed and a scaling factor to be applied to the combined block is selected based upon the results of the addition of the soft decisions contained in the stored and re-transmitted information blocks (i.e., after the blocks have been combined). If the result of that initial combining operation has been stored in memory, the scaling factor can be applied directly to the content of the memory. Alternatively, the combining operation is carried out again with the scaling factor applied. However, that approach requires memory (to store the result of the initial combining operation) or processing resources (to perform the combining operation twice).